using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace spaceInvaders
{
    class Enemigo
    {
        #region Atributos

        private Vector2 pos; //posicion del enemigo
        private Texture2D textura; //textura del enemigo
        private Texture2D textura2; //textura del enemigo
        private Texture2D textura3; //textura del enemigo
        
        private Disparo disp; //disparo
        private Texture2D texturaDisparo; //Textura del disparo


        private static Random rand = new Random();
        private int probabilidadDisparo = 2;

        private float velocidad;

        

               
        #endregion

        #region Propiedades

        /// <summary>
        /// Propiedad Posicion
        /// </summary>
        /// 

        public Vector2 Posicion
        {
            get { return pos; }
            set { pos = value; }
        }
        
        /// <summary>
        /// Propiedad Textura
        /// </summary>
        public Texture2D Textura
        {
            get { return textura; }
            set { textura = value; }
        }

        public Texture2D Textura2
        {
            get { return textura2; }
            set { textura2 = value; }
        }

        public Texture2D Textura3
        {
            get { return textura3; }
            set { textura3 = value; }
        }

        /// <summary>
        /// Propiedad disparo
        /// </summary>
        public Disparo Disparo
        {
            get { return disp; }
            set { disp = value; }
        }


        /// <summary>
        /// Propiedad Textura del disparo
        /// </summary>
        public Texture2D TexturaDisparo
        {
            get { return texturaDisparo; }
            set { texturaDisparo = value; }
        }

        public Rectangle Rect
        {
            get { return new Rectangle((int)pos.X, (int)pos.Y, textura.Height, textura.Width); }
        }


        public float Velocidad
        {
            get { return velocidad; }
            set { velocidad = value; }
        }

        #endregion

        #region Metodos

        public Enemigo()
        {
            /// Constructor por defecto del enemigo
            pos = new Vector2(400,100);
            disp = null;
        }

        public Enemigo(Vector2 posicion)
        {
            /// consturctor sobrecargado del enemigo
            pos = posicion;
            velocidad = 2f;
        }

        public void actualiza()
        {
            /// Comprueba el teclado y mueve el enemigo

            //movemos el enemigo
            pos.X += velocidad;


            if (disp == null)
            {
                if (rand.Next(1000) < probabilidadDisparo)
                    disparar();
            }
            else
            {
                disp.actualiza();
            }
           
        }

        public void disparar()
        {
            if (disp == null)
                disp = new Disparo(new Vector2(pos.X + textura.Width/2, pos.Y), texturaDisparo, Disparo.Direccion.Abajo2);
            
            //Si el disparo esta vivo, lo movemos. Si no, lo ponemos a null
            //para poder volver a disparar
            if (disp != null)
            {
                if (disp.Vivo)
                    disp.actualiza();
                else
                    disp = null;
            }

        }

        public void Draw(SpriteBatch batch)
        {
            /// Pinta la nave y el disparo si lo tiene

            batch.Draw(textura, pos, Color.White);

            //Pintamos el disparo
            if (disp != null)
            {
                batch.Draw(disp.Textura, disp.Posicion, Color.White);
                
            }
        }

        #endregion

    }
}
